package com.zhang.spark_1.spark_core.operator.action

import org.apache.spark.rdd.RDD
import org.apache.spark.{SparkConf, SparkContext}

/**
 * @title:
 * @author: zhang
 * @date: 2021/12/8 09:12 
 */
object Spark01_RDD_Operator_Action {

  def main(args: Array[String]): Unit = {
    //获取spark的连接
    val conf: SparkConf = new SparkConf().setMaster("local[*]").setAppName("operator")
    val sc: SparkContext = new SparkContext(conf)

    val rdd: RDD[Int] = sc.makeRDD(List(1, 2, 3, 4), 2)

    //foreach其实是在Driver执行的
    rdd.collect().foreach(println)
    //foreach其实是在Excutor端内存数据打印
    println("====================")
    rdd.foreach(println)
    //算子：operator（操作）
    /*
    RDD的方法和Scala集合对象的方法不一样：
    集合对象的方法都是在同一个节点的内存中完成的。
    RDD的方法可以将计算逻辑发送到Executor端（分布式节点）执行，为了区分不同的处理效果，所以将RDD的方法称为算子
    RDD的方法外部的操作都是在Driver端执行的，而方法内部的逻辑代码都是在Executor端执行
     */


    sc.stop()
  }
}
